有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

检查匹配括号的java字符堆栈没有错误,但也没有任何作用

我花了半年的时间停止编程,现在我正在用超基本的面试问题来刷新我的记忆。。。第一次我被困了两天。。下面是我的代码,有人能告诉我为什么程序没有显示错误,但编译后什么也不做吗?它应该忽略文本字符,但我甚至还没有

public class bracketCheck {

public static void main(String[] args) {


Stack <Character> s = new <Character> Stack(); 
Scanner input = new Scanner(System.in);
String buff; 

System.out.println("please enter brackets & text");
buff = input.nextLine(); 
input.close();
int count = 0;
boolean cont = true;
Character stackTop;
Character current = buff.charAt(count);
do {
    if(current == ')' || current== '}' || current== ']') {
        s.push(current);
        count++;
    }
    else if(current== '(' || current== '{' || current== '[') {
        stackTop = s.pop();
        cont = match(stackTop, current);    
    }
}
while(s.isEmpty() == false /*&& cont =true*/); 
if(s.isEmpty())
    System.out.println("bout time......");

}

private static boolean match(Character top , Character not) {
    if(top == ')' && not == '(') 
        return true;
    else if(top == ']' && not == '[') 
        return true;
    else if(top == '}' && not == '{') 
        return true;
    else 
        return false;
}

}

共 (1) 个答案

  1. # 1 楼答案

    我在你的代码中看到了一些问题,这是我的固定版本

    import java.util.Scanner;
    import java.util.Stack;
    
    // use Capital letters in the beginning of class names
    public class BracketCheck {
        public static void main(String[] args) {
    
            Stack<Character> stack = new Stack<>();
            Scanner input = new Scanner(System.in);
            String buff;
    
            System.out.println("please enter brackets & text");
            buff = input.nextLine();
            input.close();
            // using java8 makes iterating over the characters of a string easier
            buff.chars().forEach(current -> {
                // if <current> is an opening bracket, push it to stack
                if (current == '(' || current == '{' || current == '[') {
                    stack.push((char) current);
                }
                // if <current> is a closing bracket, make sure it is matching an opening
                // bracket or alert and return
                else if (current == ')' || current == '}' || current == ']') {
                    if (!match(stack, (char) current)) {
                        System.out.println("no good");
                        return;
                    }
                }
            });
            // if, after we finished iterating the string, stack is empty, all opening
            // brackets had matching closing brackets
            if (stack.isEmpty()) {
                System.out.println("bout time......");
            }
            // otherwise, alert
            else {
                System.out.println("woah");
            }
        }
    
        private static boolean match(Stack<Character> stack, Character closer) {
            // if stack is empty, the closer has no matching opener
            if (stack.isEmpty()) {
                return false;
            } else {
                // get the most recent opener and verify it matches the closer
                Character opener = stack.pop();
                if (opener == '(' && closer == ')')
                    return true;
                else if (opener == '[' && closer == ']')
                    return true;
                else if (opener == '{' && closer == '}')
                    return true;
                else
                    return false;
            }
        }
    }